package com.tulele.vtool.mapper;

import com.tulele.vtool.model.BArticleTableInfo;
import com.tulele.vtool.model.combinedEntity.CombinedAritcleTableDetail;
import com.tulele.vtool.model.combinedEntity.CombinedAritcleTableInfo;
import com.tulele.vtool.model.combinedEntity.CombinedCustomerInfo;
import com.tulele.vtool.model.combinedEntity.CombinedCustomerYearInfo;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component;

import java.util.List;

@Component(value = "articleTableInfoMapper")
public interface ArticleTableInfoMapper {
    /**
     * 保存用户文章信息采集表单
     * @param entity 实体类
     * @return 主键 ID
     */
    int saveArticleTableInfo(BArticleTableInfo entity);

    /**
     * 根据 ID 获取文章采集信息
     * @param id 主键 ID
     * @return 文章采集信息
     */
    CombinedAritcleTableInfo getArticleTableInfoById(Integer id);

    /**
     * 获取用户收到的反馈表单总数量
     * @param userId 用户 ID
     * @return 用户收到的反馈表单总数量
     */
    Integer getArticleTableCountByOwner(Integer userId);

    /**
     * 获取最近三天用户收到的反馈表单总数量
     * @param userId 用户 ID
     * @return 最近三天用户收到的反馈表单总数量
     */
    Integer getLatestThreeDaysCount(Integer userId);

    /**
     * 获取用户收到的反馈表单明细
     * @param userId 用户 ID
     * @return 用户收到的反馈表单明细
     */
    List<CombinedAritcleTableDetail> getArticleTableDetail(Integer userId);

    /**
     * 获取本周的用户表单数量列表
     * @param userId 用户 ID
     * @param firstDayOfWeek 本周第一天
     * @param lastDayOfWeek 本周最后一天
     * @return 本周的用户表单数量列表
     */
    List<CombinedCustomerInfo> getCurrentWeekTableData(@Param("userId") Integer userId, @Param("firstDayOfWeek") String firstDayOfWeek, @Param("lastDayOfWeek") String lastDayOfWeek);

    /**
     * 获取本月的用户表单数量列表
     * @param userId 用户 ID
     * @param firstDayOfMonth 本月第一天
     * @param lastDayOfMonth 本月最后一天
     * @return 本月的用户表单数量列表
     */
    List<CombinedCustomerInfo> getCurrentMonthTableData(@Param("userId") Integer userId, @Param("firstDayOfMonth") String firstDayOfMonth, @Param("lastDayOfMonth") String lastDayOfMonth);

    /**
     * 获取本季的用户表单数量列表
     * @param userId 用户 ID
     * @param firstDayOfSeason 本季第一天
     * @param lastDayOfSeason 本季最后一天
     * @return 本季的用户表单数量列表
     */
    List<CombinedCustomerInfo> getCurrentSeasonTableData(@Param("userId") Integer userId, @Param("firstDayOfSeason") String firstDayOfSeason, @Param("lastDayOfSeason") String lastDayOfSeason);

    /**
     * 获取本季的用户表单数量列表（按月份）
     * @param userId 用户 ID
     * @param firstMonthOfSeason 本季第一个月份
     * @param lastMonthOfSeason 本季最后一个月份
     * @return 本季的用户表单数量列表（按月份）
     */
    List<CombinedCustomerYearInfo> getCurrentSeasonTableDataByMonth(@Param("userId") Integer userId, @Param("firstMonthOfSeason") Integer firstMonthOfSeason, @Param("lastMonthOfSeason") Integer lastMonthOfSeason);

    /**
     * 获取年度的用户表单数量列表
     * @param userId 用户 ID
     * @return 年度的用户表单数量列表
     */
    List<CombinedCustomerYearInfo> getCurrentYearTableData(Integer userId);

    /**
     * 查询用户提交文章表单信息
     * @param userId 用户 ID
     * @param articleId 文章 ID
     * @return 表单信息
     */
    BArticleTableInfo getArticleTableByUserId(@Param("userId") Integer userId, @Param("articleId") Integer articleId);
}
